#!/bin/bash

# 检查是否传入了4个环境参数
if [ $# -ne 4 ]; then
  echo "Usage: $0 <environment1> <namespace1> <environment2> <namespace2>"
  exit 1
fi

# 读取传入的环境参数
env1=$1
NAMESPACE1=$2
env2=$3
NAMESPACE2=$4

# 检查kubectl是否可用
if ! command -v kubectl &> /dev/null; then
  echo "错误: kubectl 命令未找到，请确保已安装并配置kubectl"
  exit 1
fi

# 检查集群环境是否存在
if ! kubectx "$env1" &> /dev/null; then
  echo "错误: 集群环境 $env1 不存在"
  exit 1
fi

if ! kubectx "$env2" &> /dev/null; then
  echo "错误: 集群环境 $env2 不存在"
  exit 1
fi

# 检查命名空间是否存在
kubectx $env1
if ! kubectl get namespace "$NAMESPACE1" &> /dev/null; then
  echo "错误: 集群环境 $env1 不存在命名空间 $NAMESPACE1"
  exit 1
fi

kubectx $env2
if ! kubectl get namespace "$NAMESPACE2" &> /dev/null; then
  echo "错误: 集群环境 $env2 不存在命名空间 $NAMESPACE2"
  exit 1
fi

# 获取env1环境NAMESPACE1命名空间镜像列表
echo "正在获取 $env1 环境 ($NAMESPACE1) 的镜像列表..."
kubectx $env1
env1_images=$(kubectl get pods -n "$NAMESPACE1" -o jsonpath="{.items[*].spec.containers[*].image}" 2>/dev/null | tr ' ' '\n' | sort | uniq | awk -F '/' '{print $NF}')

if [ -z "$env1_images" ]; then
  echo "警告: 在 $env1 环境 ($NAMESPACE1) 中没有找到任何Pod或镜像"
fi

# 获取env2环境NAMESPACE2命名空间镜像列表
echo "正在获取 $env2 环境 ($NAMESPACE2) 的镜像列表..."
kubectx $env2
env2_images=$(kubectl get pods -n "$NAMESPACE2" -o jsonpath="{.items[*].spec.containers[*].image}" 2>/dev/null | tr ' ' '\n' | sort | uniq | awk -F '/' '{print $NF}')

if [ -z "$env2_images" ]; then
  echo "警告: 在 $env2 环境 ($NAMESPACE2) 中没有找到任何Pod或镜像"
fi

# 转换为数组
IFS=$'\n' read -d '' -r -a env1_array <<< "$env1_images"
IFS=$'\n' read -d '' -r -a env2_array <<< "$env2_images"

echo ""
echo "======================================"
echo "镜像对比结果"
echo "======================================"

# 找出 env1 中有但 env2 中没有的镜像
echo ""
echo "在 $env1 ($NAMESPACE1) 中存在但在 $env2 ($NAMESPACE2) 中不存在的镜像:"
found_diff=false
for image in "${env1_array[@]}"; do
  if [ -n "$image" ]; then
    found=false
    for image2 in "${env2_array[@]}"; do
      if [ "$image" = "$image2" ]; then
        found=true
        break
      fi
    done
    if [ "$found" = false ]; then
      echo "  - $image"
      found_diff=true
    fi
  fi
done
if [ "$found_diff" = false ]; then
  echo "  (无)"
fi

# 找出 env2 中有但 env1 中没有的镜像
echo ""
echo "在 $env2 ($NAMESPACE2) 中存在但在 $env1 ($NAMESPACE1) 中不存在的镜像:"
found_diff=false
for image in "${env2_array[@]}"; do
  if [ -n "$image" ]; then
    found=false
    for image1 in "${env1_array[@]}"; do
      if [ "$image" = "$image1" ]; then
        found=true
        break
      fi
    done
    if [ "$found" = false ]; then
      echo "  - $image"
      found_diff=true
    fi
  fi
done
if [ "$found_diff" = false ]; then
  echo "  (无)"
fi

# 显示共同存在的镜像
echo ""
echo "在两个环境中共同存在的镜像:"
common_count=0
for image in "${env1_array[@]}"; do
  if [ -n "$image" ]; then
    for image2 in "${env2_array[@]}"; do
      if [ "$image" = "$image2" ]; then
        echo "  - $image"
        ((common_count++))
        break
      fi
    done
  fi
done
if [ $common_count -eq 0 ]; then
  echo "  (无)"
fi

echo ""
echo "======================================"
echo "统计信息:"
echo "  $env1 ($NAMESPACE1): ${#env1_array[@]} 个镜像"
echo "  $env2 ($NAMESPACE2): ${#env2_array[@]} 个镜像"
echo "  共同镜像: $common_count 个"
echo "======================================"